﻿/*
 ***************************************************************************
 * Microsoft Visual C# .NET
 * 名称：       Shpm.App.Commons.Utils.BeanUtils
 * 类型：       
 * 功能说明：   把源对象里的各个字段的内容直接赋值给目标对象
 * 作者：       谈震鸣
 * 创建日期：   2007/08/14
 * 修改日期     修改者      修改内容
 * 
 * 
 * ---
 ***************************************************************************
*/
using System;
using System.Reflection;
using System.Diagnostics;

namespace Shpm.App.Commons.Utils
{
    public class BeanUtils
    {
        /**/
        /// <summary>
        /// 把源对象里的各个字段的内容直接赋值给目标对象（只是字段复制，两个对象的字段名和类型都必须一致）
        /// </summary>
        /// <param name="dest">目标对象</param>
        /// <param name="src">源对象</param>
        public static void CopyProperties(object  dest, object  src)
        {
            if (null == src) { throw new ArgumentNullException("src can't be null"); }
            if (null == dest) { throw new ArgumentNullException("dest can't be null"); }

            Type srcType = src.GetType();
            Type destType = dest.GetType();

            FieldInfo[] srcInfo = srcType.GetFields(BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.Public);
            FieldInfo[] destInfo = destType.GetFields(BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.Public);

 
            try
            {
                for (int i = 0; i < srcInfo.Length; i++)
                {
                    string name = srcInfo[i].Name;
                    object val = srcInfo[i].GetValue(src);

                    for (int j = 0; j < destInfo.Length; j++)
                    {
                        string tagname = destInfo[j].Name;
                        if (name.Equals(tagname))
                        {
                            destInfo[j].SetValue(dest, val);
                            break;
                        }
                    }
                }
            }
            catch(Exception)
            {
                
            }
        }

    }
}
          
